package com.yidu.DatelessManagement.service.impl;

import com.yidu.BusinessParament.entity.Cash;
import com.yidu.DatelessManagement.entity.NetWorth;
import com.yidu.DatelessManagement.mapper.NetWorthMapper;
import com.yidu.DatelessManagement.service.NetWorthService;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 净值统计的实现层
 * @author 任俊杰
 * @version 1.0
 * @date 2023/1/5
 */
@Service
public class NetWorthServiceImpl implements NetWorthService {
    @Resource
    private NetWorthMapper netWorthMapper;


    /**
     * 查询所有净值统计表所有信息
     * @param netWorth 净值统计实体类
     * @return List<NetWorth> 净值统计集合
     */
    @Override
    public List<NetWorth> selectAllNetWorthNoLimit(NetWorth netWorth) {
        //创建map集合
        Map<String,Object>map=new HashMap<>();
        //存值
        // sqlWhere 有关条件查询的
        map.put("sqlWhere",sqlWhere(netWorth));
        map.put("fundId", netWorth.getFundId());
        return netWorthMapper.selectAllNetWorthNoLimit(map);
    }


    /**
     * 获取总行数
     * @param fundId 基金id
     * @param createTime 创建时间
     * @return int 总行数
     */
    @Override
    public int getSumRow(String fundId, String createTime) {
        //创建map集合
        Map<String,Object>map=new HashMap<>();
        //存值
        map.put("fundId", fundId);
        map.put("createTime", createTime);
        return netWorthMapper.getSumRow(map);
    }

    /**
     * 清空当日的统计数据
     * @param fundId 基金id
     * @param createTime 创建时间
     * @return int 总行数
     */
    @Override
    public int deleteSameDayStatisticalData(String fundId, String createTime) {
        //创建map集合
        Map<String,Object>map=new HashMap<>();
        //存值
        map.put("fundId", fundId);
        map.put("createTime", createTime);
        return netWorthMapper.deleteSameDayStatisticalData(map);
    }

    /**
     * 获取证券信息
     * @param securityType 证券类型 1为股票  2为债券
     * @param fundId 基金id
     * @param date 时间
     * @return List<NetWorth> 净值统计对象集合
     */
    @Override
    public List<NetWorth> getSecuritiesMsg(int securityType, String fundId, String date) {
        //创建map集合
        Map<String,Object>map=new HashMap<>();
        //存值
        map.put("securityType", securityType);
        map.put("fundId", fundId);
        map.put("date", date);
        return netWorthMapper.getSecuritiesMsg(map);
    }

    /**
     * 新增父模块数据
     * @param netWorth 净值统计对象
     * @return int 执行成功的行数
     */
    @Override
    public int insertParentModule(NetWorth netWorth) {
        return netWorthMapper.insertParentModule(netWorth);
    }

    /**
     * 新增子功能模块
     * @param netWorth 净值统计对象
     * @return int 执行成功的行数
     */
    @Override
    public int insertSubmodule(NetWorth netWorth) {
        return netWorthMapper.insertSecurities(netWorth);
    }


    /**
     * 获取现金对象集合
     * @param fundId 基金id
     * @param date 创建时间 取现金库存的时间
     * @return List<Cash>现金对象集合
     */
    @Override
    public List<Cash> getCash(String fundId, String date) {
        //创建map对象
        Map map = new HashMap();
        //存值
        map.put("fundId",fundId);
        map.put("date",date);
        return netWorthMapper.getCash(map);
    }


    /**
     * 获取现金子模块（账户）下的存款利息
     * @param businessType 业务类型 1为管理费 2为托管费 3为存款利息 4为申购赎回费
     * @param fundId 基金id
     * @param date 现金库存的时间
     * @return List<Cash> 现金对象集合
     */
    @Override
    public List<Cash> getCashInterestOnDeposit(int businessType, String fundId, String date) {
        //创建map集合
        Map<String,Object>map=new HashMap<>();
        //将值存入到map集合中
        map.put("businessType",businessType);
        map.put("fundId",fundId);
        map.put("date",date);
        return netWorthMapper.getCashInterestOnDeposit(map);
    }


    /**
     * 获取证券清算款
     * @param fundId 基金id
     * @param date 证券应收应付库存的时间
     * @return int 返回一个int类型的参数
     */
    @Override
    public int getSecuritiesLiquidationMoney(String fundId, String date) {
        //创建map集合
        Map<String,Object>map=new HashMap<>();
        //将值存入到map集合
        map.put("fundId", fundId);
        map.put("date", date);
        return netWorthMapper.getSumRow(map);
    }


    /**
     * 获取股票单位净值的集合
     * @param fundId 基金id
     * @param date 证券库存的时间
     * @return List<Double> 返回list集合
     */
    @Override
    public List<Double> getUnitNetWorth(String fundId, String date) {
        Map<String,Object>map=new HashMap<>();
        map.put("fundId", fundId);
        map.put("date", date);
        return netWorthMapper.getUnitNetWorth(map);
    }


    /**
     * where条件的拼接
     * @param netWorth 净值统计对象
     * @return String 拼接条件
     */
    public String sqlWhere(NetWorth netWorth) {
        String str = "";
        if (netWorth.getCreateTime() != null && !"".equals(netWorth.getCreateTime())) {
            str += " and createTime like '%" + netWorth.getCreateTime() + "%'";
        }
        //返回拼接条件
        return str;
    }

}
